package org.alis.smallcc.designpatterns.behavior.memento;

import org.alis.smallcc.designpatterns.behavior.state.State;

/**
 * 发起者
 * 
 * 发起者本身有一个状态
 * 这里将和备忘录模式一起使用
 * 
 * @author luochuan
 */
public abstract class Originator {
	/**
	 * 首先发起者 本身有一个状态
	 */
	protected State state;
	
	/**
	 * 给当前发起者一个值
	 * @param state
	 */
	public void setState(State state) {
		this.state= state;
	}
	
	public String getState() {
		return state.currentState();
	}
	
	/**
	 * 存储当前操作记录
	 * @param 
	 */
	protected Memento saveCurrentState() {
		System.out.println(getOriginator()+"记录下当前状态："+this.state.currentState());
		return new Memento(state);
	}
	
	/**
	 * 获取上一步操作记录对象
	 */
	protected void reversal(Memento memento) {
		this.state = memento.getState();
		System.out.println(getOriginator()+"恢复上一个状态："+this.state.currentState());
	}
	
	/**
	 * 这里扩展一下 可以直接指定存放的备忘录铺
	 */
	protected void saveCurrentState(CareTaker careTaker) {
		careTaker.pushMemento(saveCurrentState());
	}
	
	/**
	 * 备忘录
	 * @param careTaker
	 */
	protected void reversal(CareTaker careTaker) {
		reversal(careTaker.popMemento());
	}
	
	public abstract String getOriginator();
	
}
